import { ElMessage } from 'element-plus';
//从菜单栏提取所有路由的path
const getrouter = (treeData, arr) => {
	treeData.forEach((element) => {
		if (element.right_level != 1 && element.menu_path != null) {
			return arr.push({
				path: '/' + element.menu_path,
				name: element.menu_path,
				component: element.menu_route,
				title: element.menu_name,
			});
		}
		if (element.child && element.child.length > 0) {
			getrouter(element.child, arr);
		}
	});
};

//以路由地址为参数，在所有菜单栏中提取出第一层菜单的名称，第一层菜单包含的子菜单.也就是找查符合参数的菜单分支
function treeFindPath(tree, path = [], routepath) {
	if (!tree) return [];
	for (const data of tree) {
		path.push(data);
		if (routepath == data.menu_path) return path;
		if (data.child) {
			const findChildren = treeFindPath(data.child, path, routepath);
			if (findChildren.length) return findChildren;
		}
		path.pop();
	}
	return [];
}

//以路由参数找查符合的节点
function treeFind(tree, routepath) {
	for (const data of tree) {
		if (data.menu_path == routepath) return data;
		if (data.child) {
			const res = treeFind(data.child, routepath);
			if (res) return res;
		}
	}
	return null;
}

// 定义一个函数filterEmptyValues，接收一个对象数组作为参数
function filterEmptyValues(objArray) {
	// 遍历数组中的每个对象
	return objArray.map((obj) => {
		// 创建一个新对象来保存非空值属性
		const result = {};

		// 遍历当前对象的所有属性和值
		for (let key in obj) {
			// 如果对象的属性值不是空字符串，则添加到结果对象中
			if (obj[key] !== '') {
				result[key] = obj[key];
			}
		}

		// 返回过滤后的对象
		return result;
	});
}

// 校验数据是否符合模板规则的函数
function validateData(data: any[], templateRules: any) {
	// 遍历数据行进行校验
	for (const [index, row] of data.entries()) {
		for (const rule of templateRules.columns) {
			if (rule.required && !row[rule.name]) {
				console.log(row);
				ElMessage.error('缺少必填列' + "'" + rule.name + "'" + '在第 ' + (index + 2) + ' 行');
				return false; // 缺少必填列
			}
			if (row[rule.name] && rule.type && typeof row[rule.name] !== rule.type) {
				ElMessage.error("'" + rule.name + "'" + '数据类型不匹配 在第 ' + (index + 2) + ' 行');
				return false; // 数据类型不匹配
			}
			if (row[rule.name] && rule.enum && row[rule.name] !== '计件' && row[rule.name] !== '计重') {
				ElMessage.error("'" + rule.name + "'" + '数据类型不匹配请填写计件或计重 在第 ' + (index + 2) + ' 行');
				return false;
			}

			// 可以添加更多校验逻辑，比如数据范围、格式等
		}
	}
	return true; // 所有数据都符合模板规则
}

export { getrouter, treeFindPath, treeFind, filterEmptyValues, validateData };
